from meiduo_mall.utils import meiduo_json
from django_redis import get_redis_connection


def merge_cookie_to_redis(request, response, user_id):
    '''
    当用户登录时，将cookie中的购物车数据合并到redis中
    :param request:请求对象
    :param response:响应对象
    :param user_id:经过登录验证，当前有效的用户对象
    说明：用户对象不能从request.user中获取，因为当前方法在登录视图中调用，请求登录视图时，没有有效的身份信息(jwt、session)
    :return:响应对象，删除cookie中购物车数据
    '''

    # 1.读取cookie中购物车数据
    cart_str = request.COOKIES.get('cart')

    # 2.判断，转字典
    if cart_str is None:
        return response
    cart_dict = meiduo_json.loads(cart_str)

    # 3.遍历，写redis
    redis_cli = get_redis_connection('cart')
    redis_pipeline = redis_cli.pipeline()
    for sku_id, value in cart_dict.items():
        # 修改hash中的数量
        redis_pipeline.hset('cart%d' % user_id, sku_id, value['count'])
        # 修改set中的选中状态
        if value['selected']:
            redis_pipeline.sadd('cart_selected%d' % user_id, sku_id)
        else:
            redis_pipeline.srem('cart_selected%d' % user_id, sku_id)
    redis_pipeline.execute()

    # 4.删除cookie中购物车数据
    response.delete_cookie('cart')

    return response
